import { Model, DataTypes, Sequelize } from "sequelize";

class User extends Model {
  declare id: number;
  declare username: string;
  declare password: string;
  declare email: string;

  public static initialize(sequelize: Sequelize) {
    this.init(
      {
        id: {
          type: DataTypes.INTEGER,
          autoIncrement: true,
          primaryKey: true,
          allowNull: false,
        },
        username: {
          type: DataTypes.STRING(50), // 假设用户名长度不超过50
          unique: true,
          allowNull: false,
        },
        password: {
          type: DataTypes.STRING(100), // 假设密码长度不超过100（通常存储加密后的密码）
          allowNull: false,
        },
        email: {
          type: DataTypes.STRING(100), // 假设邮箱长度不超过100
          allowNull: false,
          unique: true,
          validate: {
            isEmail: true, // 验证是否为有效的邮箱格式
          },
        },
        avatar: {
          type: DataTypes.STRING(100), // 假设邮箱长度不超过100
          allowNull: true,
          comment: "用户头像"
        }
      },
      {
        sequelize: sequelize, // 绑定数据库实例
        modelName: "User", // 模型名称
        tableName: "users", // 数据库表名
        timestamps: true, // Sequelize 默认的 createdAt 和 updatedAt 字段
        paranoid: true,
        indexes: [
          {
            unique: true,
            fields: ["username"],
            name: "username_unique", // 明确指定索引名称
          },
          {
            unique: true,
            fields: ["email"],
            name: "email_unique", // 明确指定索引名称
          },
        ],
      },
    );
  }
}

export default User;
